#pragma once

#define YACC_OUT					"..\\compilerius grammar\\jacc\\y.out"
#define GRAMMAR_FILE				"..\\compilerius grammar\\jacc\\ansi_c.y"
#define GRAPH_FILE					"Tests\\graph.svg"

#define GRAM_STATE					"state "
#define GRAM_POINT					"."

#define LEX_IDENT					"identifier"
#define LEX_STRING_LITER			"string_literal"
#define LEX_CHAR_LITER				"char_literal"
#define LEX_NUM						"const_num"
#define LEX_INT						"int"
#define LEX_FLOAT					"float"
#define LEX_CHAR					"char"
#define LEX_ERROR					"error"

#define SYNTAX_SHIFT				"shift"
#define SYNTAX_REDUCE				"reduce"
#define SYNTAX_GOTO					"goto"
#define SYNTAX_ACCEPT				"accept"
#define SYNTAX_ERROR				"error"
#define SYNTAX_END					"$end"

#define UTILS_SPACE_CHAR			' '
#define UTILS_TAB_CHAR				'\t'
#define UTILS_SPACE_STRING			" "
#define UTILS_TAB_STRING			"\t"

#define LLVM_DEFINE_FILE			"llvm_define.txt"
#define LLVM_INPUT_FILE				"llvm_input.s"
#define LLVM_OUTPUT_FILE			"llvm_output.bc"
#define LLVM_OUTPUT_OPT_FILE		"llvm_output_opt.bc"
#define LLVM_BC_PATH				L"..\\llvm\\llvm-2.6-x86-mingw32\\llvm-2.6\\llvm-as.exe"
#define LLVM_BC_ARGS				L" -o llvm_output.bc llvm_input.s"
#define LLVM_RUN_PATH				L"..\\llvm\\llvm-2.6-x86-mingw32\\llvm-2.6\\lli.exe"
#define LLVM_RUN_ARGS				L" llvm_output.bc"
#define LLVM_OPT_PATH				L"..\\llvm\\llvm-2.6-x86-mingw32\\llvm-2.6\\opt.exe"
#define LLVM_OPT_ARGS				L" -o llvm_output_opt.bc llvm_output.bc"

#define SEMANTICS_ASSIGNMENT_EXP	"assignment_expression"
#define SEMANTICS_EQ_EXP			"equality_expression"
#define SEMANTICS_RELATIONAL_EXP	"relational_expression"
#define SEMANTICS_ADD_EXP			"additive_expression"
#define SEMANTICS_MUL_EXP			"multiplicative_expression"
#define SEMANTICS_EXT_VAR			"ext_variable"
#define SEMANTICS_VAR				"variable_"
#define SEMANTICS_DECLARATION		"declaration_"
#define SEMANTICS_POSTFIX_EXP		"postfix_expression"
#define SEMANTICS_UNARY_EXP			"unary_expression"
#define SEMANTICS_PRIM_EXP			"primary_expression"
#define SEMANTICS_TYPE_SPEC			"type_specifier"
#define SEMANTICS_COMP_STATE		"compound_statement"
#define SEMANTICS_MAIN_STATE		"main_statement"
#define SEMANTICS_DEC_LIST			"declaration_list"
#define SEMANTICS_STATE_LIST		"statement_list"
#define SEMANTICS_LOG_OR			"logical_or_expression"
#define SEMANTICS_LOG_AND			"logical_and_expression"
#define SEMANTICS_IO_STATE			"io_statement"
#define SEMANTICS_STR_STATE			"str_statement"
#define SEMANTICS_EXP_STATE			"expression_statement"
#define SEMANTICS_EXP_STATE			"expression_statement"
